package avicit.bdp.dms.perm.dao;

import avicit.bdp.common.base.BaseDAO;
import avicit.bdp.dms.perm.dto.DataPermDTO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @金航数码科技有限责任公司
 * @作者：developer
 * @邮箱：developer@avic-digital.com
 * @创建时间： 2022-11-09
 * @类说明：DataPermDAO
 * @修改记录：
 * @注意事项：
 * @主要功能：行权限DAO
 */
@Repository
public interface DataPermDAO extends BaseDAO<DataPermDTO> {
    /**
     * 根据角色和表查询权限
     * 注意：
     *  1、数据查看时，根据当前登录用户角色信息，查询指定表权限，如果不同角色对同一个表设置了权限，以最后设置的为准
     *  2、授权角色，根据角色和tableId查询权限信息
     * @param roleIdList
     * @param talbeId
     * @return
     */
    List<DataPermDTO> getDataPermByTable(@Param("roleIdList")List<String> roleIdList,
                                         @Param("tableId")String talbeId);

    /**
     * 授权界面，根据角色和分类ID查询权限信息
     * @param roleId
     * @param typeIdList
     * @return
     */
    Page<DataPermDTO> queryDataPermByCond(@Param("roleId")String roleId,
                                          @Param("typeIdList")List<String> typeIdList,
                                          @Param("keyWords") String keyWords);

    /**
     * 根据主键ID查询权限详情
     * @param id
     * @return
     */
    DataPermDTO getDataPermDetail(@Param("id")String id);

    /**
     * 根据角色ID删除权限（授权角色授权时先删除旧权限，再设置新权限）
     * 场景1：业务模块删除模型时，根据tableId删除权限
     * 场景2：授权角色新增权限时，根据roleId+tableId删除权限
     * @param roleId 角色ID
     * @param tableId 模型分类节点ID
     * @return
     */
    int deletePermByCond(@Param("roleId")String roleId,
                         @Param("tableId")String tableId);

    /**
     * 根据角色查询已授权模型的分类节点ID列表
     * @param roleId
     * @return
     */
    List<String> getNodeIdListByRole(@Param("roleId")String roleId);

    /**
     * 根据角色查询已授权模型的模型ID列表
     * @param roleId
     * @return
     */
    List<String> getTableIdListByRole(@Param("roleId")String roleId);
}
